package cn.mes.module.mes.service.baseworkshop;

import cn.mes.framework.common.pojo.PageParam;
import cn.mes.framework.common.pojo.PageResult;
import cn.mes.module.mes.controller.admin.basemachineinfo.vo.BaseMachineInfoPageReqVO;
import cn.mes.module.mes.controller.admin.baseworkshop.vo.BaseWorkShopPageReqVO;
import cn.mes.module.mes.controller.admin.baseworkshop.vo.BaseWorkShopSaveReqVO;
import cn.mes.module.mes.controller.admin.baseworkshop.vo.MachineAreaListReqVO;
import cn.mes.module.mes.controller.admin.baseworkshop.vo.WorkShopListReqVO;
import cn.mes.module.mes.dal.dataobject.baseworkshop.BaseMachineAreaDO;
import cn.mes.module.mes.dal.dataobject.basemachineinfo.BaseMachineInfoDO;
import cn.mes.module.mes.dal.dataobject.baseworkshop.BaseWorkShopDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 车间信息 Service 接口
 *
 * @author 游创
 */
public interface BaseWorkShopService {

    /**
     * 创建车间信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createBaseWorkShop(@Valid BaseWorkShopSaveReqVO createReqVO);

    /**
     * 更新车间信息
     *
     * @param updateReqVO 更新信息
     */
    void updateBaseWorkShop(@Valid BaseWorkShopSaveReqVO updateReqVO);

    /**
     * 删除车间信息
     *
     * @param id 编号
     */
    void deleteBaseWorkShop(String id);

    /**
     * 获得车间信息
     *
     * @param id 编号
     * @return 车间信息
     */
    BaseWorkShopDO getBaseWorkShop(String id);


    /**
     * 基于租户，筛选车间列表
     * 注意，如果是系统租户，返回的还是全车间
     *
     * @param reqVO 筛选条件请求 VO
     * @return 车间列表
     */
    List<BaseWorkShopDO> getWorkShopListByTenant(WorkShopListReqVO reqVO);

    List<BaseWorkShopDO> getWorkShopList(WorkShopListReqVO reqVO);

    List<BaseWorkShopDO> getWorkShopList();

    /**
     * 获得车间信息分页
     *
     * @param pageReqVO 分页查询
     * @return 车间信息分页
     */
    PageResult<BaseWorkShopDO> getBaseWorkShopPage(BaseWorkShopPageReqVO pageReqVO);

    // ==================== 子表（生产区域信息） ====================

    /**
     * 获得生产区域信息分页
     *
     * @param pageReqVO  分页查询
     * @param workShopId 所属车间ID
     * @return 生产区域信息分页
     */
    PageResult<BaseMachineAreaDO> getBaseMachineAreaPage(PageParam pageReqVO, String workShopId);

    List<BaseMachineAreaDO> getMachineAreaList(MachineAreaListReqVO reqVO);

    /**
     * 创建生产区域信息
     *
     * @param baseMachineArea 创建信息
     * @return 编号
     */
    String createBaseMachineArea(@Valid BaseMachineAreaDO baseMachineArea);

    /**
     * 更新生产区域信息
     *
     * @param baseMachineArea 更新信息
     */
    void updateBaseMachineArea(@Valid BaseMachineAreaDO baseMachineArea);

    /**
     * 删除生产区域信息
     *
     * @param id 编号
     */
    void deleteBaseMachineArea(String id);

    /**
     * 获得生产区域信息
     *
     * @param id 编号
     * @return 生产区域信息
     */
    BaseMachineAreaDO getBaseMachineArea(String id);


    // ==================== 子表（机台产线基础信息） ====================

    /**
     * 获得机台产线基础信息分页
     *
     * @param pageReqVO 分页查询
     * @return 机台产线基础信息分页
     */
    PageResult<cn.mes.module.mes.dal.dataobject.basemachineinfo.BaseMachineInfoDO> getBaseMachineInfoPage(@Valid BaseMachineInfoPageReqVO pageReqVO);

    /**
     * 创建机台产线基础信息
     *
     * @param baseMachineInfo 创建信息
     * @return 编号
     */
    String createBaseMachineInfo(@Valid BaseMachineInfoDO baseMachineInfo);

    /**
     * 更新机台产线基础信息
     *
     * @param baseMachineInfo 更新信息
     */
    void updateBaseMachineInfo(@Valid BaseMachineInfoDO baseMachineInfo);

    /**
     * 删除机台产线基础信息
     *
     * @param id 编号
     */
    void deleteBaseMachineInfo(String id);

    /**
     * 获得机台产线基础信息
     *
     * @param id 编号
     * @return 机台产线基础信息
     */
    BaseMachineInfoDO getBaseMachineInfo(String id);


}